// 右键菜单选项
let MenuSpendAmount = {
    "id": 'spendAmount',
    "title": "消费支出",
    "contexts": ["selection"]
};
let MenuMyRight = {
    "id": "search",
    "title": "Goobe搜索",
    "contexts": ["selection"]
};

// 当应用被安装时将项目添加到 Chrome 的右键菜单中
chrome.runtime.onInstalled.addListener(function () {
    // 添加消费支出上下文菜单 
    chrome.contextMenus.create(MenuSpendAmount);
    // 添加搜索菜单
    chrome.contextMenus.create(MenuMyRight);
});
// 判断是否为整数
function isInt(value) {
    return !isNaN(value) && parseInt(Number(value)) == value && !isNaN(parseInt(value, 10));
}
// 函数通过将特定字符的每个实例替换为一个、两个、三或四转义序列来对统一资源标识符 (URI) 进行编码 
function fixedEncodeURI(str) {
    return encodeURI(str).replace(/%5B/g, '[').replace(/%5D/g, ']');
}

// 单击上下文菜单项时触发事件
chrome.contextMenus.onClicked.addListener((clickData) => {
    // clickData 单击上下文菜单项时发送的信息
    if (clickData.menuItemId == "spendAmount" && clickData.selectionText) {
        // 将用户选择的文本转化为整数
        if (isInt(clickData.selectionText)) {
            chrome.storage.sync.get(['total', 'limit'], (budget) => {
                let newTotal = 0;
                if (budget.total) {
                    newTotal += parseInt(budget.total);
                }
                // 计算最新总支出
                newTotal += parseInt(clickData.selectionText);
                // 存储最新总支出
                chrome.storage.sync.set({ 'total': newTotal }, () => {
                    // 超出限额提醒
                    if (newTotal >= budget.limit) {
                        // 创建并显示通知
                        let Options = {
                            type: "basic",
                            iconUrl: "images/jjy64.png",
                            title: "过度消费警告!",
                            message: "你的消费支出已经达到限额，请理性消费！"
                        };
                        // limitNotification 通知标识符。如果没有设置或为空，将自动生成一个 ID。
                        chrome.notifications.create(Options);

                    }
                });
            });
        }
    }

    // 右键搜索
    if (clickData.menuItemId == "search" && clickData.selectionText) {
        var wikiUrl = "https://goobe.io/search.aspx?k=" + fixedEncodeURI(clickData.selectionText);
        var createData = {
            "url": wikiUrl
        };
        chrome.tabs.create(createData);
    }
});
// 当一项或多项更改时触发
chrome.storage.onChanged.addListener((changes, storageName) => {
    for (let [key, { oldValue, newValue }] of Object.entries(changes)) {
        if (key == "total") {
            // 可以显示一个“徽章”——在图标上分层的一些文字。
            chrome.action.setBadgeText({ "text": changes.total.newValue.toString() });
        } else {
            // 可以显示一个“徽章”——在图标上分层的一些文字。
            chrome.action.setBadgeText({ "text": changes.limit.newValue.toString() });
        }
    }
    // 设置徽标颜色
    chrome.action.setBadgeBackgroundColor(
        { color: 'green' },
        // () => { }
    );
    // 两秒后移除徽章
    setTimeout(() => {
        chrome.action.setBadgeText({ "text": '' });
    }, 2000)
});
